#include <Keypad.h>
#include <SoftwareSerial.h>   //加载软串口库
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "OLED.h"
#include "Keypad.h"
#include "SoftwareSerial.h"
#include "STATE.h"
/*
接线方式：
OLED:SCL->A5 SDA->A4
按键矩阵:分为行线和列线、行线插{12, 11, 10, 9, 8}、列线插{7, 6, 5}
SIM800C：TXD->3 RXD->4
*/
/*
  初始：MENU_MODE
    拨号->INPUT_MODE
  INPUT_MODE:打
    拨号->显示
    按红->删除
    按黄->返回MENU_MODE
    按绿->拨号->CALLING_MODE(号码、挂断)
  DIALING_MODE:被呼叫(显示CALLING，允许挂断、接听电话)
    按红->挂断->MENU_MODE
    按绿->接听->TALKING_MODE
  CALLING_MODE:呼叫界面(允许挂断电话)
    按红、黄、超时->挂断电话、返回MENU_MODE
  TALKING_MODE:接起电话(允许挂断电话)
    按红、黄->挂断电话、返回MENU_MODE
*/

void setup(){
  Serial.begin(9600);
  DebugSerial.begin(9600); // 定义软串口的波特率
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  
  display.clearDisplay();//清屏 
  display.display();

  DebugSerial.write("AT+CLIP=1\n");// 开来电显示

  CURR= MENU_MODE;
  show_menu();
}
void loop(){
  char key = keypad.getKey();// Read the key
  if (key){// Print if key pressed
    if(key!=14 && CURR==MENU_MODE){// 不是黄键，切换到输入模式
      // if(key==13)ORDER(ATA,TALKING_MODE);
      // else if(key==14||key==15)ORDER(ATH,MENU_MODE);
      CURR= show_input();
      switch(CURR){
        case TALKING_MODE:{
          show_talking();
          break;
        } 
        case CALLING_MODE:{
          show_calling(order);
        }                  
        default:
          show_menu();        
      }
    }// 按任意键切换到输入模式
    // if(CURR==DIALING_MODE){
    //   if(key==13){//接听
    //     ORDER(ATA,TALKING_MODE);
    //   }
    //   if(key==14||key==15)//挂断
    //     ORDER(ATH,MENU_MODE);
    // }
    // if(CURR==TALKING_MODE)
    //   if(key==14||key==15)//挂断
    //     ORDER(ATH,MENU_MODE);
  }
  // next_loop:
  char temp;
  while(DebugSerial.available()){//持续监听软串口 
    if(!lock){//非写状态
      temp= DebugSerial.read(); 
    }
    Serial.print(temp);   
    if(temp== ':'){//注意这里是单引号！！换成双引号会出错
      CURR= DIALING_MODE;
      show_dialing();
    }
  }  
}
